package com.lxj.util;

import com.lxj.common.BussiException;
import com.lxj.common.Constant;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

/**
 * @author lxj
 * @date 2021/6/22 11:03
 * @Description:校验数据的工具类
 * 两个部分构成
 * 1 规则 (该数据必须符合什么规则)---> 规则使用注解表示
 * 2 若不符合规则,则产生什么后果
 * 常用的校验规则:
 * 1 针对字符串 :NotBlank
 * 2 针对数字类: @NotNull @Range
 * 3 针对集合: @NotEmpty
 * 4 针对邮箱: @Email
 * 5 针对密码: 长度@Length
 */
public class ValidatorUtil {
    /**
     * 数据校验器对象
     */
    public static final Validator validator ;

    /**
     * 实例化数据校验器对象
     */
    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    /**
     * 进行数据校验码
     * @param object
     */
    public static void validator(Object object){
        /**
         * 进行具体的数据校验
         */
        Set<ConstraintViolation<Object>> validateSet = validator.validate(object);
        //如果数据校验器校验的结果不为空 说明就存在数据校验不通过
        if (validateSet != null && !validateSet.isEmpty()){
            //遍历校验不通过的信息
            for (ConstraintViolation<Object> objectConstraintViolation : validateSet) {
                //校验不通过的原因
                String message = objectConstraintViolation.getMessage();
                Integer code = Constant.PARAM_CHECKED_ERROR;
                throw new BussiException(code,message);
            }
        }
    }
}
